/**
 * Cookie工具函数
 */

/**
 * 检查是否在浏览器环境中
 * @returns {boolean} true表示在浏览器环境中，false表示在服务端环境中
 */
const isBrowser = () => {
  return typeof window !== 'undefined' && typeof document !== 'undefined'
}

/**
 * 获取Cookie值
 * @param {string} name - Cookie名称
 * @returns {string|null} Cookie值，如果不存在则返回null
 */
export const getCookie = (name) => {
  // 检查是否在浏览器环境中
  if (!isBrowser()) {
    console.warn('getCookie: 当前不在浏览器环境中，无法获取Cookie')
    return null
  }
  
  try {
    const cookies = document.cookie.split(';')
    for (let cookie of cookies) {
      const [cookieName, cookieValue] = cookie.trim().split('=')
      if (cookieName === name) {
        return decodeURIComponent(cookieValue)
      }
    }
    return null
  } catch (error) {
    console.error('获取Cookie失败:', error)
    return null
  }
}

/**
 * 设置Cookie
 * @param {string} name - Cookie名称
 * @param {string} value - Cookie值
 * @param {number} days - 过期天数
 */
export const setCookie = (name, value, days) => {
  // 检查是否在浏览器环境中
  if (!isBrowser()) {
    console.warn('setCookie: 当前不在浏览器环境中，无法设置Cookie')
    return
  }
  
  try {
    const expires = new Date()
    expires.setDate(expires.getDate() + days)
    document.cookie = `${name}=${encodeURIComponent(value)};expires=${expires.toUTCString()};path=/`
  } catch (error) {
    console.error('设置Cookie失败:', error)
  }
}

/**
 * 删除Cookie
 * @param {string} name - Cookie名称
 */
export const deleteCookie = (name) => {
  // 检查是否在浏览器环境中
  if (!isBrowser()) {
    console.warn('deleteCookie: 当前不在浏览器环境中，无法删除Cookie')
    return
  }
  
  try {
    document.cookie = `${name}=;expires=Thu, 01 Jan 1970 00:00:00 GMT;path=/`
  } catch (error) {
    console.error('删除Cookie失败:', error)
  }
}

/**
 * 解析JWT token
 * @param {string} token - JWT token
 * @returns {Object|null} 解析后的payload，如果token无效则返回null
 */
export const parseJWT = (token) => {
  try {
    const base64Url = token.split('.')[1]
    const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/')
    const jsonPayload = decodeURIComponent(atob(base64).split('').map(c => {
      return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2)
    }).join(''))
    return JSON.parse(jsonPayload)
  } catch (error) {
    console.error('JWT解析失败:', error)
    return null
  }
}

/**
 * 检查JWT token是否过期
 * @param {string} token - JWT token
 * @returns {boolean} true表示已过期，false表示未过期
 */
export const isJWTExpired = (token) => {
  const payload = parseJWT(token)
  if (!payload || !payload.exp) {
    return true
  }
  
  const currentTime = Math.floor(Date.now() / 1000)
  return payload.exp < currentTime
}

/**
 * 检查用户是否已登录（通过Cookie中的sso_token）
 * @returns {boolean} true表示已登录，false表示未登录
 */
export const isLoggedIn = () => {
  const token = getCookie('sso_token')
  if (!token) {
    return false
  }
  
  // 检查token是否过期
  return !isJWTExpired(token)
}